package br.ifrn.diacin.ctrlAula.negocio;


import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import javax.ejb.EJB;
import javax.ejb.Stateless;

import br.ifrn.diacin.ctrlAula.integracao.dao.ReservaDAO;
import br.ifrn.diacin.ctrlAula.integracao.model.Ambiente;
import br.ifrn.diacin.ctrlAula.integracao.model.Horarios;
import br.ifrn.diacin.ctrlAula.integracao.model.Reserva;
import br.ifrn.diacin.ctrlAula.integracao.model.Usuario;

@Stateless
public class SolicitaReservaAmbienteBean  extends GenericBean implements SolicitarReservaAmbienteLocal{
	
	@EJB
	ReservaDAO reservaDAO;
	
	/* (non-Javadoc)
	 * @see br.ifrn.diacin.ctrlAula.negocio.SolicitarReservaAmbienteLocal#todosHorarios(br.ifrn.diacin.ctrlAula.integracao.model.Ambiente, java.lang.String)
	 */
	@Override
	public List<Reserva> todosHorarios(int idAmbiente, String data){
		Date date;
		try {
			date = new SimpleDateFormat("dd/MM/yyyy").parse(data);
		} catch (ParseException e) {
			date = null;
		}
		Ambiente ambiente = getDao().pesquisarPorId(Ambiente.class, idAmbiente);
		List<Reserva> reservasExistentes = reservaDAO.listarReservas(ambiente, date);
		List<Reserva> horarios = new ArrayList<Reserva>();
		
		for(int x = 0; x < 16; x++){
			Reserva reserva = null;
			Horarios h = getHorarioPorIndice(x + 1);
			for(Reserva r : reservasExistentes){
				if(r.getHorarioReserva().getHorario().equals(h.getHorario())){
					reserva = r;
					reserva.setReservado(true);
					break;
				}
			}
			if(reserva == null){
				reserva = new Reserva();
				reserva.setAmbiente(ambiente);
				reserva.setHorarioReserva(h);
				reserva.setDataReserva(date);
				reserva.setReservado(false);
			}
			horarios.add(reserva);
		}
		return horarios;
	}
	
	private Horarios getHorarioPorIndice(int indice){
		switch(indice){
		case 1: return Horarios.M1;
		case 2: return Horarios.M2;
		case 3: return Horarios.M3;
		case 4: return Horarios.M4;
		case 5: return Horarios.M5;
		case 6: return Horarios.M6;
		
		case 7: return Horarios.V1;
		case 8: return Horarios.V2;
		case 9: return Horarios.V3;
		case 10: return Horarios.V4;
		case 11: return Horarios.V5;
		case 12: return Horarios.V6;
		
		case 13: return Horarios.N1;
		case 14: return Horarios.N2;
		case 15: return Horarios.N3;
		case 16: return Horarios.N4;
		}
		return null;
	}

	@Override
	public List<Ambiente> listarTodosAmbiente() {
		return reservaDAO.listarTodos(Ambiente.class);
	}

	@Override
	public void reservarAmbiente(int idAmbiente, int numHorario, String data,
			String matricula) {
		Usuario u = getDao().pesquisarPorId(Usuario.class, matricula);
		Ambiente a = getDao().pesquisarPorId(Ambiente.class, idAmbiente);
		Date date;
		try {
			date = new SimpleDateFormat("dd/MM/yyyy").parse(data);
		} catch (ParseException e) {
			date = null;
		}
		Reserva r = new Reserva(u, false);
		r.setAmbiente(a);
		r.setDataReserva(date);
		r.setHorarioReserva(getHorarioPorIndice(numHorario));
		getDao().salvar(r);
		
	}
	
}
